前言:幾乎你所有在 iOS 當中可以見到的元件,他背後都是 UIView ,例如 Buttn、TextField、tableView 等等...
而每個 UIView 背後都是 CALayer
UIView 處理 layout 或 handle touch event,但它不處理圖形或動畫,UIKit 則是將任務 delegate 給CoreAnimation 去處理。基本上 UIView 是 CALayer 封裝過後的樣子,UIView 外觀的呈現,是經由 Core Animation 去實作。
再繼續之前,我先舉個簡單的例子讓大家看看 layer 能做些什麼
當你今天想再編輯會員頁面的 title 時,旁邊出現紅色邊框,你可以鍵入以下程式碼:
// 紅框出現
titleTextField.layer.borderWidth = 1
titleTextField.layer.borderColor = UIColor.red.cgColor
// 紅框消失
titleTextField.layer.borderWidth = 0
titleTextField.layer.borderColor = nil
// 陰影
titleTextField.layer.shadowOpacity = 0.5
這邊要注意一件事,如果你今天不是使用既定的 View ,而是像這樣創建一個 layer:
let layer = CALayer()
記住此時不要把 delegate 指到你的其他 UIView 上,例如前面 titleTextField 上面,因為 UIView 本身就有自己 layer 的 delegate 了。